home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / develop / symcoff.arc / PLOPEN.C < prev    next >
Text File  |  1988-11-07  |  3KB  |  79 lines

  1. static char *sccsid[]={"@(#)pldopen.c   2.1",
  2. "Copyright 1985 by Motorola Inc."};
  3. #include <stdio.h>
  4. #ifdef PCPORT
  5. #include "/pld/src/hd/pcport.h"      /*PC-PORT*/
  6. #endif
  7. #include "../hd/par.h"
  8. #include "../hd/pfilehdr.h"
  9. #include "../hd/pldfcn.h"
  10.  
  11. #include "../hd/pldf_dcl.h"        /*PC-PORT*/
  12. /****************** PLDOPEN ********************************************gs##*/
  13. /*                                                                        ##*/
  14. /*                                                                        ##*/
  15. /* Written by:  Michael Greenberg - MIL                                   ##*/
  16. /*                                                                        ##*/
  17. /* ACTION:                                                                ##*/
  18. /*      Open a common object file for reading.                            ##*/
  19. /*                                                                        ##*/
  20. /* SYNOPSIS:                                                              ##*/
  21.       LDFILE *pldopen(filename, ldptr)                                  /*##*/
  22. /*    ---------------------------------                                   ##*/
  23. register char   *filename;                                              /*##*/
  24. register LDFILE *ldptr;                                                 /*##*/
  25. /*                                                                        ##*/
  26. /*************************************************************************##*/
  27. {
  28.         char            line[sizeof(ARMAG)];
  29.         register long   disp;
  30.         long            ftell();
  31.         struct ar_hdr   ar_head;
  32.         register LDFILE *nldptr;
  33.  
  34.         if(!ldptr)
  35.         {
  36.                 if((nldptr=(LDFILE *) pldallocptr()) == FAILURE)
  37.                         return(NULL);
  38. #ifndef PCPORT
  39.                 if((IOPTR(nldptr) = fopen(filename, "r")) == NULL)
  40.                         return(NULL);
  41. #else
  42.                 if((IOPTR(nldptr) = fopen(filename, "rb")) == NULL)
  43.                         return(NULL);
  44. #endif
  45.                 if(fread(line, sizeof(ARMAG), 1, IOPTR(nldptr)) != 1)
  46.                         return(NULL);
  47.  
  48. #ifndef PCPORT
  49.                 if(strncmp (line, ARMAG, sizeof(ARMAG) - 1) == 0)
  50. #else
  51.                 if(strnicmp(line, ARMAG, sizeof(ARMAG) - 1) == 0)
  52. #endif
  53.                 {
  54.                         /* archive format */
  55.                         TYPE(nldptr) = PLDARMAG;
  56.                         OFFSET(nldptr) = sizeof(ARMAG) + sizeof(struct ar_hdr) - 1;
  57.                         disp = _fpldahread(nldptr) + OFFSET(nldptr) +
  58.                                 sizeof(struct ar_hdr);
  59.                         fseek(IOPTR(nldptr), disp, 0);
  60.                         OFFSET(nldptr) = ftell(IOPTR(nldptr));
  61.                 }
  62.                 else
  63.                 {
  64.                         fseek(IOPTR(nldptr), 0L, 0);
  65.                         OFFSET(nldptr) = 0L;
  66.                         TYPE(nldptr) = 1;
  67.                 }
  68.                 fread(&HEADER(nldptr), FILHSZ, 1, IOPTR(nldptr));
  69.                 return(nldptr);
  70.         }
  71.         else
  72.         {
  73.                 if(fread(&HEADER(ldptr), FILHSZ, 1, IOPTR(ldptr)) != 1)
  74.                         return(NULL);
  75.                 return(ldptr);
  76.         }
  77. }
  78. /* Copyright 1985 by Motorola Inc. */
  79.